/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controladores;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.util.*;
import Beans.Proveedor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
 *Esta clase sirve como controlador de la clase Proveedor y aqui
 * se registra, modifica, consulta y elimina
 * @author Leyner Cordoba Mosquera
 */
public class Mproveedor {

  private  List <Proveedor> proveedores = new LinkedList<Proveedor>();//lista
  Proveedor pr= new Proveedor();
   File archivo=new File("Proveedores.dat");

    public List<Proveedor> getProveedores() {
        return proveedores;
    }

    public void setProveedores(List<Proveedor> proveedores) {
        this.proveedores = proveedores;
    }


     public void grabar() throws IOException {

      FileOutputStream   flujoSalida  = new FileOutputStream(archivo);
      ObjectOutputStream objetoSalida = new ObjectOutputStream(flujoSalida);
      objetoSalida.writeObject(this.getProveedores());
      objetoSalida.close();
     }


    

    public void restaurar() throws IOException,ClassNotFoundException {
    if(archivo.exists()==true){
        FileInputStream flujoEntrada    = new FileInputStream(archivo);
  	ObjectInputStream objetoEntrada = new ObjectInputStream(flujoEntrada);
  	List<Proveedor> pro = (List) objetoEntrada.readObject();
  	this.setProveedores(pro);
        objetoEntrada.close();
    }
 	
    }

      public Boolean Existe(String nit){
        boolean sw=false;
        Iterator it = getProveedores().iterator();
        while(it.hasNext()){
            pr = (Proveedor)it.next();
            if(pr.getNit().equals(nit)){
                sw=true;
            }
        }
        return sw;
    }


      public void Modificar(int pos,String nit,Proveedor prove){
       Iterator itc=getProveedores().iterator();
         while(itc.hasNext()){
             pr = (Proveedor)itc.next();
            if(pr.getNit().equals(nit)){
                getProveedores().set(pos, prove);
                JOptionPane.showMessageDialog(null,"Los datos se guardaron "
                                                 + "Satisfactoriamente");
            }
        }
       }

      public int GenerarCodigo(){
        int codigo= 0;
        int limite = 10000;
        Random r = new Random();
        codigo = r.nextInt(limite+1);
       return codigo;

    }


      public int Posicion(String nit){
          Iterator itc=getProveedores().iterator();
          int pos=-1;
          int ind=-1;
         while(itc.hasNext()){
             pr = (Proveedor)itc.next();
            if(pr.getNit().equals(nit)){
                ind=ind+1;
                 pos=ind;
                 
            }else{
                ind=ind+1;

            }
         }
          return pos;
    }

      public void Modificar(String nit,Proveedor prove){
        int posicion = this.Posicion(nit);
         getProveedores().set(posicion, prove);
         JOptionPane.showMessageDialog(null,"Los datos se guardaron "
                                                 + "Satisfactoriamente");
        try {
            this.grabar();
        } catch (IOException ex) {
            Logger.getLogger(Mproveedor.class.getName()).log(Level.SEVERE, null, ex);
        }
       }


 

     public void Registrar(Proveedor pr){
         if(!Existe(pr.getNit())){
             getProveedores().add(pr);
             JOptionPane.showMessageDialog(null,"El proveedor se registro "
                                              + "correctamente");
            try {
                this.grabar();
            } catch (IOException ex) {
                Logger.getLogger(Mproveedor.class.getName()).log(Level.SEVERE, null, ex);
            }
         }else{
             JOptionPane.showMessageDialog(null,"El proveedor"
                                              + " ya se encuentra registrado",
                                              "Informacion"
                                              ,JOptionPane.ERROR_MESSAGE);
         }
      }

    public Proveedor Consultar(String nit){
        Iterator it = getProveedores().iterator();
        while(it.hasNext()){
            Proveedor pro = (Proveedor)it.next();
              if(pro.getNit().equals(nit)){
                 return pro;
              }
         }
        return new Proveedor();
     }

     public void Eliminar(String nit){
        try{
        Iterator it = getProveedores().iterator();
        while(it.hasNext()){
        Proveedor p =(Proveedor)it.next();
        if(p.getNit().equals(nit)){
          getProveedores().remove(p);
               try {
                    this.grabar();
                } catch (IOException ex) {
                    Logger.getLogger(Mproveedor.class.getName()).log(Level.SEVERE, null, ex);
                }
              JOptionPane.showMessageDialog(null,"Eliminado","Informacion",JOptionPane.INFORMATION_MESSAGE);
            }
         }
         }catch(ConcurrentModificationException e){
         
         }
     }
 }
